package com.glink.manage.service;

import com.glink.manage.dto.barriergate.DeviceLoginDTO;
import com.glink.manage.dto.barriergate.DeviceNotifyDTO;
import com.glink.manage.dto.barriergate.DeviceSyncPersonDTO;
import com.glink.manage.dto.barriergate.RecordUploadOnlineDTO;
import com.glink.manage.vo.barriergate.DeviceLoginVO;
import com.glink.manage.vo.barriergate.DeviceNotifyVO;
import com.glink.manage.vo.barriergate.ResultVO;

import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;

public interface BarrierGateService {
    
    /**
     * 设备登录
     * @param dto 登录信息
     * @return 登录参数
     */
    DeviceLoginVO login_lianYi(DeviceLoginDTO dto);

    /**
     * 查询人员信息
     * @param dto 查询条件
     * @return 人员信息
     */
    ResultVO syncPerson_lianYi(DeviceSyncPersonDTO dto);

    /**
     * 设备反馈同步结果
     * @param notifyDTO 结果信息
     * @return 请求状态
     */
    DeviceNotifyVO deviceNotify_lianYi(DeviceNotifyDTO notifyDTO);

    /**
     * 下发数据
     * @param devSno 设备号
     */
    void issuingPerson(String devSno);

    /**
     * 下发删除人员信息
     * @param personObjId 人员ID
     */
    void issuingPersonDataDelete(String personObjId);

    /**
     * 组装mqtt数据- 临时人员删除
     * @param personObjId 人员
     */
    void issuingTemporaryPersonDataDelete(String personObjId);
    /**
     * 下发数据
     * @param personObjId 人员ObjId
     */
    void issuingPersonByPersonObjIdAndDepartment(String personObjId);

    /**
     * 同步人员信息
     * @param personObjId 人员ObjId
     */
    void issuingPersonByPersonObjId(String personObjId);
    
    /**
     * 记录人员打卡信息
     * @param dto 人员信息
     * @return 返回结果
     */
    DeviceNotifyVO recordUploadOnline_lianYi(RecordUploadOnlineDTO dto);

    /**
     * 下发数据-临时准入
     * @param personObjId 人员ID
     */
    void issuingTemporaryPersonByPersonObjId(String personObjId);

    /**
     * 下发车辆
     * @param licensePlate 车牌号
     * @param cycleStart 开始时间
     * @param cycleEnd 结束时间
     * @param workId 工程ID
     */
    void issuedCarAdd(String licensePlate, Date cycleStart, Date cycleEnd, String workId);
    
    /**
     * 下发车辆数据-临时准入
     * @param carId 车辆ID
     */
    void issuingTemporaryCarToBarrierGateByCarObjId(String carId);

    /**
     * 删除车辆
     * @param carId 临时车辆ID
     */
    void issuingTemporaryCarDeleteToBarrierGateByCarObjId(String carId);
        
    /**
     * 下发车辆删除
     * @param licensePlate 车牌号
     * @param workIdList 工程
     */
    void issuedCarDeleteByLicensePlate(String licensePlate, List<String> workIdList);

    /**
     * 下发车辆
     * @param sn 设备号
     */
    void issuedCarBySn(String sn);

    /**
     * 下发车辆
     * @param vehicleId 车辆ID
     */
    void issuedCarByVehicleId(String vehicleId);

    /**
     * 下发数据到道闸
     * @param nowDate 校验时间
     */
    void taskIssuedDataToBarrierGates(LocalDateTime nowDate);
}
